home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 1 / LSD Compendium Deluxe 1.iso / a / programming / c / genmo112.lha / GTB-Modula / GenModula / GenerateWindows.mod < prev    next >
Encoding:
Modula Implementation  |  1993-09-28  |  44.4 KB  |  1,671 lines

  1. IMPLEMENTATION MODULE GenerateWindows;
  2.  
  3. (*
  4.  * -------------------------------------------------------------------------
  5.  *
  6.  *    :Program.    GenModula
  7.  *    :Contents.    A Modula 2 Sourcecode generator for GadToolsBox
  8.  *
  9.  *    :Author.    Reiner B. Nix
  10.  *    :Address.    Geranienhof 2, 50769 Köln Seeberg
  11.  *    :Address.    rbnix@pool.informatik.rwth-aachen.de
  12.  *    :Copyright.    Reiner B. Nix
  13.  *    :Language.    Modula-2
  14.  *    :Translator.    M2Amiga A-L V4.2d
  15.  *    :Imports.    GadToolsBox, NoFrag  by Jaan van den Baard
  16.  *    :Imports.    InOut, NewArgSupport by Reiner Nix
  17.  *    :History.    this programm is a direct descendend from
  18.  *    :History.     OG (Oberon Generator) 37.11 by Thomas Igracki, Kai Bolay
  19.  *    :History.    GenModula 1.10 (23.Aug.93)    ;M2Amiga V4.0d    
  20.  *    :History.    GenModula 1.12 (10.Sep.93)    ;M2Amiga V4.2d
  21.  *
  22.  * -------------------------------------------------------------------------
  23.  *)
  24.  
  25. FROM    SYSTEM            IMPORT    ADR, CAST;
  26. FROM    String            IMPORT    Length, FirstPos,
  27.                     Copy, Concat;
  28. FROM    Conversions        IMPORT    ValToStr;
  29. FROM    FileMessage        IMPORT    StrPtr;
  30. FROM    IntuitionD        IMPORT    WaTags,
  31.                     IDCMPFlags, IDCMPFlagSet,
  32.                     WindowFlags, WindowFlagSet;
  33. FROM    GadToolsD        IMPORT    genericKind, buttonKind, checkboxKind,
  34.                     integerKind, listviewKind, mxKind, numberKind,
  35.                     cycleKind, paletteKind, scrollerKind,
  36.                     sliderKind, stringKind, textKind, numKinds,
  37.                     GtTags;
  38. FROM    UtilityD        IMPORT    Tag,
  39.                     tagEnd,
  40.                     TagItem, TagItemPtr;
  41. FROM    UtilityL        IMPORT    GetTagData;
  42. FROM    FileOut            IMPORT    Write, WriteString, WriteLn,
  43.                     WriteCard, WriteInt, WriteHex;
  44. FROM    GadToolsBox        IMPORT    maxFontName,
  45.                     GuiFlags, GuiFlagSet,
  46.                     GenCFlags, BBoxFlags,
  47.                     GTConfigFlags, WindowTagFlags,
  48.                     BevelBox,
  49.                     BevelBoxPtr, ExtNewGadgetPtr, ProjectWindowPtr,
  50.                     TagInArray;
  51. FROM    GeneratorIO        IMPORT    dfile, mfile, args,
  52.                     Gui, MainConfig, CConfig, Projects,
  53.                     WriteFill, SeekBack, GetAttrName;
  54.  
  55.  
  56. CONST    reservedKind        =10;
  57.  
  58.  
  59. TYPE    IDCMPArray        =ARRAY [0..numKinds-1],[0..25] OF CHAR;
  60.  
  61.  
  62. VAR    IDCMPText        :IDCMPArray;
  63.  
  64.  
  65. (*
  66.  * --- Initialisierung für Text -------------------------------------------------
  67.  *)
  68. PROCEDURE InitIDCMPText;
  69.  
  70. BEGIN
  71. IDCMPText[genericKind]  := "IDCMPFlagSet {gadgetUp}";
  72. IDCMPText[buttonKind]   := "buttonIDCMP";
  73. IDCMPText[checkboxKind] := "checkboxIDCMP";
  74. IDCMPText[integerKind]  := "integerIDCMP";
  75. IDCMPText[listviewKind] := "listviewIDCMP";
  76. IDCMPText[mxKind]       := "mxIDCMP";
  77. IDCMPText[numberKind]   := "numberIDCMP";
  78. IDCMPText[cycleKind]    := "cycleIDCMP";
  79. IDCMPText[paletteKind]  := "paletteIDCMP";
  80. IDCMPText[scrollerKind] := "scrollerIDCMP";
  81. IDCMPText[reservedKind] := " ! RESERVED ! ";
  82. IDCMPText[sliderKind]   := "sliderIDCMP";
  83. IDCMPText[stringKind]   := "stringIDCMP";
  84. IDCMPText[textKind]     := "textIDCMP"
  85. END InitIDCMPText;
  86.  
  87.  
  88.  
  89. (*
  90.  * --- Codegeneration -----------------------------------------------------------
  91.  *)
  92. PROCEDURE WriteWindowConsts        (    pw            :ProjectWindowPtr);
  93.  
  94. BEGIN
  95. WriteString (mfile, "\t");                    (* ProjectLeft            *)
  96. WriteString (mfile, pw^.name);
  97. WriteString (mfile, "Left");
  98. WriteFill   (mfile, pw^.name, 4);
  99. WriteString (mfile, "=");
  100. WriteCard   (mfile, GetTagData (Tag (waLeft), 0, pw^.tags), 3);
  101. Write       (mfile, ";");
  102. WriteLn (mfile);
  103.  
  104. WriteString (mfile, "\t");                    (* ProjectTop            *)
  105. WriteString (mfile, pw^.name);
  106. WriteString (mfile, "Top");
  107. WriteFill   (mfile, pw^.name, 3);
  108. WriteString (mfile, "=");
  109. WriteCard   (mfile, GetTagData (Tag (waTop), 0, pw^.tags), 3);
  110. Write       (mfile, ";");
  111. WriteLn (mfile);
  112.  
  113. WriteString (mfile, "\t");                    (* ProjectWidth =        *)
  114. WriteString (mfile, pw^.name);
  115. WriteString (mfile, "Width");
  116. WriteFill   (mfile, pw^.name, 5);
  117. WriteString (mfile, "=");
  118. IF NOT (FontAdapt IN MainConfig.configFlags0) THEN
  119.   IF InnerWidth IN pw^.tagFlags THEN
  120.     WriteCard (mfile, pw^.innerWidth, 3)
  121.  
  122.   ELSE
  123.     WriteCard (mfile, GetTagData (Tag (waWidth), 0, pw^.tags), 3)
  124.     END
  125.  
  126. ELSE
  127.   WriteCard (mfile, pw^.innerWidth, 3)
  128.   END;
  129. Write       (mfile, ";");
  130. WriteLn (mfile);
  131.  
  132. WriteString (mfile, "\t");                    (* ProjectHeight =        *)
  133. WriteString (mfile, pw^.name);
  134. WriteString (mfile, "Height");
  135. WriteFill   (mfile, pw^.name, 6);
  136. WriteString (mfile, "=");
  137. IF NOT (FontAdapt IN MainConfig.configFlags0) THEN
  138.   IF InnerHeight IN pw^.tagFlags THEN
  139.     WriteCard (mfile, pw^.innerHeight, 3)
  140.  
  141.   ELSE
  142.     WriteInt (mfile, GetTagData (Tag (waHeight), 0, pw^.tags) - pw^.topBorder, 3)
  143.     END
  144.  
  145. ELSE
  146.   WriteCard (mfile, pw^.innerHeight, 3)
  147.   END;
  148. Write       (mfile, ";");
  149. WriteLn (mfile)
  150. END WriteWindowConsts;
  151.  
  152.  
  153.  
  154. PROCEDURE WriteWindowDefs        (    pw            :ProjectWindowPtr);
  155.  
  156.  
  157. BEGIN
  158. WriteString (dfile, "\t");
  159. WriteString (dfile, pw^.name);
  160. WriteString (dfile, "Window");
  161. WriteFill    (dfile, pw^.name, 6);
  162. WriteString (dfile, ":WindowPtr;");
  163. WriteLn (dfile);
  164.  
  165. IF (FontAdapt IN MainConfig.configFlags0) AND
  166.    (gcSysFont IN CConfig) THEN
  167.   WriteString (mfile, "\t");
  168.   WriteString (mfile, pw^.name);
  169.   WriteString (mfile, "Font");
  170.   WriteFill   (mfile, pw^.name, 4);
  171.   WriteString (mfile, ":TextFontPtr;");
  172.   WriteLn (mfile)
  173.   END;
  174.  
  175. IF ((Zoom IN pw^.tagFlags) OR
  176.     (DefaultZoom IN pw^.tagFlags)) AND
  177.    NOT (windowSizing IN pw^.windowFlags) THEN
  178.   WriteString (mfile, "\t");
  179.   WriteString (mfile, pw^.name);
  180.   WriteString (mfile, "Zoom");
  181.   WriteFill   (mfile, pw^.name, 4);
  182.   WriteString (mfile, ":ARRAY [1..4] OF INTEGER;");
  183.   WriteLn (mfile)
  184.   END
  185. END WriteWindowDefs;
  186.  
  187.  
  188. PROCEDURE WriteWindowProcs        (    pw            :ProjectWindowPtr);
  189.  
  190.  
  191.   PROCEDURE WriteWindowCreate        (    pw            :ProjectWindowPtr);
  192.  
  193.     PROCEDURE WriteOpenWindow        (    pw            :ProjectWindowPtr);
  194.  
  195.       PROCEDURE WriteIDCMPFlags        (    idcmp        :IDCMPFlagSet;
  196.                                pw            :ProjectWindowPtr);
  197.  
  198.         PROCEDURE WriteIDCMPSets    (    pw            :ProjectWindowPtr);
  199.  
  200.         TYPE    KindSet            =SET OF [0..numKinds-1];
  201.  
  202.         VAR    eng            :ExtNewGadgetPtr;
  203.             kindUsed        :KindSet;
  204.  
  205.         BEGIN
  206.         kindUsed := KindSet {};
  207.         eng := pw^.gadgets.head;
  208.         WHILE eng^.succ # NIL DO
  209.           IF NOT (eng^.kind IN kindUsed) THEN
  210.             WriteString (mfile, IDCMPText[eng^.kind]);
  211.             WriteString (mfile, "+");
  212.             INCL (kindUsed, eng^.kind);
  213.  
  214.             IF (eng^.kind = scrollerKind) AND
  215.                (TagInArray (Tag (gtscArrows), eng^.tags)) THEN
  216.               WriteString (mfile, "arrowIDCMP+")
  217.               END
  218.             END;
  219.           eng := eng^.succ
  220.           END
  221.         END WriteIDCMPSets;
  222.  
  223.  
  224.       (* WriteIDCMPFlags *)
  225.       BEGIN
  226.       IF idcmp = IDCMPFlagSet {} THEN
  227.         WriteString (mfile, "IDCMPFlags {},");
  228.         WriteLn (mfile)
  229.  
  230.       ELSE
  231.         WriteIDCMPSets (pw);
  232.  
  233.         WriteString (mfile, "IDCMPFlagSet {");
  234.  
  235.         IF gadgetUp IN idcmp THEN
  236.           WriteString (mfile, "gadgetUp,")
  237.           END;
  238.         IF gadgetDown IN idcmp THEN
  239.           WriteString (mfile, "gadgetDown,")
  240.           END;
  241.         IF intuiTicks IN idcmp THEN
  242.           WriteString (mfile, "intuiTicks,")
  243.           END;
  244.         IF mouseMove IN idcmp THEN
  245.           WriteString (mfile, "mouseMove,")
  246.           END;
  247.         IF mouseButtons IN idcmp THEN
  248.           WriteString (mfile, "mouseButtons,")
  249.           END;
  250.         IF sizeVerify IN idcmp THEN
  251.           WriteString (mfile, "sizeVerify,")
  252.           END;
  253.         IF newSize IN idcmp THEN
  254.           WriteString (mfile, "newSize,")
  255.           END;
  256.         IF reqSet IN idcmp THEN
  257.           WriteString (mfile, "reqSet,")
  258.           END;
  259.         IF menuPick IN idcmp THEN
  260.           WriteString (mfile, "menuPick,")
  261.           END;
  262.         IF closeWindow IN idcmp THEN
  263.           WriteString (mfile, "closeWindow,")
  264.           END;
  265.         IF rawKey IN idcmp THEN
  266.           WriteString (mfile, "rawKey,")
  267.           END;
  268.         IF reqVerify IN idcmp THEN
  269.           WriteString (mfile, "reqVerify,")
  270.           END;
  271.         IF reqClear IN idcmp THEN
  272.           WriteString (mfile, "reqClear,")
  273.           END;
  274.         IF menuVerify IN idcmp THEN
  275.           WriteString (mfile, "menuVerify,")
  276.           END;
  277.         IF newPrefs IN idcmp THEN
  278.           WriteString (mfile, "newPrefs,")
  279.           END;
  280.         IF diskInserted IN idcmp THEN
  281.           WriteString (mfile, "diskInserted,")
  282.           END;
  283.         IF diskRemoved IN idcmp THEN
  284.           WriteString (mfile, "diskRemoved,")
  285.           END;
  286.         IF activeWindow IN idcmp THEN
  287.           WriteString (mfile, "activeWindow,")
  288.           END;
  289.         IF inactiveWindow IN idcmp THEN
  290.           WriteString (mfile, "inactiveWindow,")
  291.           END;
  292.         IF deltaMove IN idcmp THEN
  293.           WriteString (mfile, "deltaMove,")
  294.           END;
  295.         IF vanillaKey IN idcmp THEN
  296.           WriteString (mfile, "vanillaKey,")
  297.           END;
  298.         IF idcmpUpdate IN idcmp THEN
  299.           WriteString (mfile, "idcmpUpdate,")
  300.           END;
  301.         IF menuHelp IN idcmp THEN
  302.           WriteString (mfile, "menuHelp,")
  303.           END;
  304.         IF changeWindow IN idcmp THEN
  305.           WriteString (mfile, "changeWindow,")
  306.           END;
  307.         IF refreshWindow IN idcmp THEN
  308.           WriteString (mfile, "refreshWindow,")
  309.           END;
  310.  
  311.         SeekBack (mfile, 1);
  312.         WriteString (mfile, "},");
  313.         END
  314.       END WriteIDCMPFlags;
  315.  
  316.  
  317.  
  318.       PROCEDURE WriteWindowFlags    (    flags        :WindowFlagSet);
  319.  
  320.       BEGIN
  321.       WriteString (mfile, "WindowFlagSet {");
  322.  
  323.       IF windowSizing IN flags THEN
  324.         WriteString (mfile, "windowSizing,")
  325.         END;
  326.       IF windowDrag IN flags THEN
  327.         WriteString (mfile, "windowDrag,")
  328.         END;
  329.       IF windowDepth IN flags THEN
  330.         WriteString (mfile, "windowDepth,")
  331.         END;
  332.       IF windowClose IN flags THEN
  333.         WriteString (mfile, "windowClose,")
  334.         END;
  335.       IF sizeBRight IN flags THEN
  336.         WriteString (mfile, "sizeBRight,")
  337.         END;
  338.       IF sizeBBottom IN flags THEN
  339.         WriteString (mfile, "sizeBBottom,")
  340.         END;
  341.       IF simpleRefresh IN flags THEN
  342.         WriteString (mfile, "simpleRefresh,")
  343.         END;
  344.       IF superBitMap IN flags THEN
  345.         WriteString (mfile, "superBitMap,")
  346.         END;
  347.       IF backDrop IN flags THEN
  348.         WriteString (mfile, "backDrop,")
  349.         END;
  350.       IF reportMouse IN flags THEN
  351.         WriteString (mfile, "reportMouse,")
  352.         END;
  353.       IF gimmeZeroZero IN flags THEN
  354.         WriteString (mfile, "gimmeZeroZero,")
  355.         END;
  356.       IF borderless IN flags THEN
  357.         WriteString (mfile, "borderless,")
  358.         END;
  359.       IF activate IN flags THEN
  360.         WriteString (mfile, "activate,")
  361.         END;
  362.       IF rmbTrap IN flags THEN
  363.         WriteString (mfile, "rmbTrap,")
  364.         END;
  365.  
  366.       SeekBack (mfile, 1);
  367.       WriteString (mfile, "},")
  368.       END WriteWindowFlags;
  369.  
  370.  
  371.     (* WriteOpenWindow *)
  372.     BEGIN
  373.     WriteString (mfile, "windowTagPtr := TAG (");
  374.     WriteString (mfile, "windowTags,");
  375.     WriteLn (mfile);
  376.  
  377.  
  378.     WriteString (mfile, "\t\t");
  379.     WriteString (mfile, "waIDCMP,");
  380.     WriteFill   (mfile, "", 8);
  381.     WriteIDCMPFlags (pw^.idcmpFlags+IDCMPFlagSet {refreshWindow}, pw);
  382.     WriteLn (mfile);
  383.  
  384.  
  385.     WriteString (mfile, "\t\t");
  386.     WriteString (mfile, "waFlags,");
  387.     WriteFill   (mfile, "", 8);
  388.     WriteWindowFlags (pw^.windowFlags);
  389.     WriteLn (mfile);
  390.  
  391.  
  392.     WriteString (mfile, "\t\t");
  393.     WriteString (mfile, "waLeft,");
  394.     WriteFill   (mfile, "", 7);
  395.     IF FontAdapt IN MainConfig.configFlags0 THEN
  396.       WriteString (mfile, "wleft,")
  397.     ELSE
  398.       WriteString (mfile, pw^.name);
  399.       WriteString (mfile, "Left,")
  400.       END;
  401.     WriteLn (mfile);
  402.  
  403.  
  404.     WriteString (mfile, "\t\t");
  405.     WriteString (mfile, "waTop,");
  406.     WriteFill   (mfile, "", 6);
  407.     IF FontAdapt IN MainConfig.configFlags0 THEN
  408.       WriteString (mfile, "wtop,")
  409.     ELSE
  410.       WriteString (mfile, pw^.name);
  411.       WriteString (mfile, "Top,")
  412.       END;
  413.     WriteLn (mfile);
  414.  
  415.  
  416.     IF NOT (FontAdapt IN MainConfig.configFlags0) THEN
  417.       IF InnerWidth IN pw^.tagFlags THEN
  418.         WriteString (mfile, "\t\t");
  419.         WriteString (mfile, "waInnerWidth,");
  420.         WriteFill   (mfile, "", 13)
  421.       ELSE
  422.         WriteString (mfile, "\t\t");
  423.         WriteString (mfile, "waWidth,");
  424.         WriteFill   (mfile, "", 8)
  425.         END;
  426.       WriteString (mfile, pw^.name);
  427.       WriteString (mfile, "Width,");
  428.       WriteLn (mfile);
  429.  
  430.       IF InnerHeight IN pw^.tagFlags THEN
  431.         WriteString (mfile, "\t\t");
  432.         WriteString (mfile, "waInnerHeight");
  433.         WriteFill   (mfile, "", 14);
  434.         WriteString (mfile, pw^.name);
  435.         WriteString (mfile, "Height,");
  436.       ELSE
  437.         WriteString (mfile, "\t\t");
  438.         WriteString (mfile, "waHeight,");
  439.         WriteFill   (mfile, "", 9);
  440.         WriteString (mfile, pw^.name);
  441.         WriteString (mfile, "Height + offy,");
  442.         END;
  443.       WriteLn (mfile)
  444.  
  445.     ELSE
  446.       WriteString (mfile, "\t\t");
  447.       WriteString (mfile, "waWidth,");
  448.       WriteFill   (mfile, "", 8);
  449.       WriteString (mfile, "ww + OffX + Screen^.wBorRight,");
  450.       WriteLn (mfile);
  451.  
  452.       WriteString (mfile, "\t\t");
  453.       WriteString (mfile, "waHeight,");
  454.       WriteFill   (mfile, "", 9);
  455.       WriteString (mfile, "wh + OffY + Screen^.wBorBottom,");
  456.       WriteLn (mfile)
  457.       END;
  458.  
  459.  
  460.     IF NOT (backDrop IN pw^.windowFlags) AND
  461.        (0 < Length (pw^.windowTitle)) THEN
  462.       WriteString (mfile, "\t\t");
  463.       WriteString (mfile, "waTitle,");
  464.       WriteFill   (mfile, "", 8);
  465.       WriteString (mfile, "ADR ('");
  466.       WriteString (mfile, pw^.windowTitle);
  467.       WriteString (mfile, "'),");
  468.       WriteLn (mfile)
  469.       END;
  470.  
  471.  
  472.     IF 0 < Length (pw^.screenTitle) THEN
  473.       WriteString (mfile, "\t\t");
  474.       WriteString (mfile, "waScreenTitle,");
  475.       WriteFill   (mfile, "", 14);
  476.       WriteString (mfile, "ADR ('");
  477.       WriteString (mfile, pw^.screenTitle);
  478.       WriteString (mfile, "'),");
  479.       WriteLn (mfile)
  480.       END;
  481.  
  482.  
  483.     IF Custom IN Gui.flags0 THEN
  484.       WriteString (mfile, "\t\t");
  485.       WriteString (mfile, "waCustomScreen,");
  486.       WriteFill   (mfile, "", 15);
  487.       WriteString (mfile, "Screen,");
  488.       WriteLn (mfile)
  489.     ELSE
  490.       WriteString (mfile, "\t\t");
  491.       WriteString (mfile, "waPubScreen,");
  492.       WriteFill   (mfile, "", 12);
  493.       WriteString (mfile, "Screen,");
  494.       WriteLn (mfile)
  495.       END;
  496.  
  497.  
  498.     IF windowSizing IN pw^.windowFlags THEN
  499.       IF TagInArray (Tag (waMinWidth), pw^.tags) THEN
  500.         WriteString (mfile, "\t\t");
  501.         WriteString (mfile, "waMinWidth,");
  502.         WriteFill   (mfile, "", 11);
  503.         WriteCard   (mfile, GetTagData (Tag (waMinWidth), 0, pw^.tags), 3);
  504.         Write       (mfile, ",");
  505.         WriteLn (mfile)
  506.         END;
  507.  
  508.       IF TagInArray (Tag (waMinHeight), pw^.tags) THEN
  509.         WriteString (mfile, "\t\t");
  510.         WriteString (mfile, "waMinHeight,");
  511.         WriteFill   (mfile, "", 12);
  512.         WriteCard   (mfile, GetTagData (Tag (waMinHeight), 0, pw^.tags), 3);
  513.         Write       (mfile, ",");
  514.         WriteLn (mfile)
  515.         END;
  516.  
  517.       IF TagInArray (Tag (waMaxWidth), pw^.tags) THEN
  518.         WriteString (mfile, "\t\t");
  519.         WriteString (mfile, "waMaxWidth,");
  520.         WriteFill   (mfile, "", 11);
  521.         WriteCard   (mfile, GetTagData (Tag (waMaxWidth), 0, pw^.tags), 3);
  522.         Write       (mfile, ",");
  523.         WriteLn (mfile)
  524.         END;
  525.  
  526.       IF TagInArray (Tag (waMaxHeight), pw^.tags) THEN
  527.         WriteString (mfile, "\t\t");
  528.         WriteString (mfile, "waMaxHeight,");
  529.         WriteFill   (mfile, "", 11);
  530.         WriteCard   (mfile, GetTagData (Tag (waMaxHeight), 0, pw^.tags), 3);
  531.         Write       (mfile, ",");
  532.         WriteLn (mfile)
  533.         END
  534.  
  535.     ELSE
  536.       IF (Zoom IN pw^.tagFlags) OR (DefaultZoom IN pw^.tagFlags) THEN
  537.         WriteString (mfile, "\t\t");
  538.         WriteString (mfile, "waZoom,");
  539.         WriteFill   (mfile, "", 7);
  540.         WriteString (mfile, "ADR (");
  541.         WriteString (mfile, pw^.name);
  542.         WriteString (mfile, "Zoom),");
  543.         WriteLn (mfile)
  544.         END
  545.       END;
  546.  
  547.  
  548.     IF (pw^.gadgets.head^.succ # NIL) AND
  549.        NOT ((args.raster) AND (pw^.boxes.head^.succ # NIL)) THEN
  550.       WriteString (mfile, "\t\t");
  551.       WriteString (mfile, "waGadgets,");
  552.       WriteFill   (mfile, "", 10);
  553.       WriteString (mfile, pw^.name);
  554.       WriteString (mfile, "GadgetList,");
  555.       WriteLn (mfile)
  556.       END;
  557.  
  558.  
  559.     IF MouseQueue IN pw^.tagFlags THEN
  560.       WriteString (mfile, "\t\t");
  561.       WriteString (mfile, "waMouseQueue,");
  562.       WriteFill   (mfile, "", 15);
  563.       WriteCard   (mfile, pw^.mouseQueue, 1);
  564.       WriteString (mfile, ",");
  565.       WriteLn (mfile)
  566.       END;
  567.  
  568.  
  569.     IF RptQueue IN pw^.tagFlags THEN
  570.       WriteString (mfile, "\t\t");
  571.       WriteString (mfile, "waRptQueue,");
  572.       WriteFill   (mfile, "", 11);
  573.       WriteCard   (mfile, pw^.rptQueue, 1);
  574.       WriteString (mfile, ",");
  575.       WriteLn (mfile)
  576.       END;
  577.  
  578.  
  579.     IF AutoAdjust IN pw^.tagFlags THEN
  580.       WriteString (mfile, "\t\t");
  581.       WriteString (mfile, "waAutoAdjust,");
  582.       WriteFill   (mfile, "", 13);
  583.       WriteString (mfile, "TRUE,");
  584.       WriteLn (mfile)
  585.       END;
  586.  
  587.  
  588.     IF FallBack IN pw^.tagFlags THEN
  589.       WriteString (mfile, "\t\t");
  590.       WriteString (mfile, "waPubScreenFallBack,");
  591.       WriteFill   (mfile, "", 19);
  592.       WriteString (mfile, "TRUE,");
  593.       WriteLn (mfile)
  594.       END;
  595.  
  596.  
  597.     WriteString (mfile, "\t\t");
  598.     WriteString (mfile, "tagEnd);");
  599.     WriteLn (mfile);
  600.     WriteLn (mfile);
  601.  
  602.     WriteString (mfile, pw^.name);
  603.     WriteString (mfile, "Window := OpenWindowTagList (NIL, windowTagPtr); ");
  604.     WriteLn (mfile);
  605.  
  606.     WriteString (mfile, "IF ");
  607.     WriteString (mfile, pw^.name);
  608.     WriteString (mfile, "Window = NIL THEN");
  609.     WriteLn (mfile);
  610.  
  611.     WriteString (mfile, "  RETURN 20");
  612.     WriteLn (mfile);
  613.  
  614.     WriteString (mfile, "  END;");
  615.     WriteLn (mfile);
  616.     WriteLn (mfile)
  617.     END WriteOpenWindow;
  618.  
  619.  
  620.  
  621.     PROCEDURE WriteCreateWinHead    (    pw            :ProjectWindowPtr);
  622.  
  623.     VAR    attrName            :ARRAY [0..maxFontName] OF CHAR;
  624.  
  625.     BEGIN
  626.     WriteLn (dfile);
  627.     WriteString (dfile, "PROCEDURE Create");
  628.     WriteString (dfile, pw^.name);
  629.     WriteString (dfile, "Window");
  630.     IF pw^.gadgets.head^.succ = NIL THEN
  631.       WriteString (dfile, " (")
  632.     ELSE
  633.       WriteFill   (dfile, pw^.name, 12);
  634.       WriteString (dfile, "(    createGadgets");
  635.       WriteFill   (dfile, "", 18);
  636.       WriteString (dfile, ":BOOLEAN")
  637.       END;
  638.     WriteString (dfile, ") :CARDINAL;");
  639.     WriteLn (dfile);
  640.     WriteLn (dfile);
  641.  
  642.  
  643.     WriteLn (mfile);
  644.     WriteString (mfile, "PROCEDURE Create");
  645.     WriteString (mfile, pw^.name);
  646.     WriteString (mfile, "Window");
  647.     IF pw^.gadgets.head^.succ = NIL THEN
  648.       WriteString (mfile, " (")
  649.     ELSE
  650.       WriteFill   (mfile, pw^.name, 12);
  651.       WriteString (mfile, "(    createGadgets");
  652.       WriteFill   (mfile, "", 18);
  653.       WriteString (mfile, ":BOOLEAN")
  654.       END;
  655.     WriteString (mfile, ") :CARDINAL;");
  656.     WriteLn (mfile);
  657.     WriteLn (mfile);
  658.  
  659.  
  660.     WriteString (mfile, "VAR");
  661.     WriteString (mfile, "\t");
  662.     WriteString (mfile, "offx, offy, ret");
  663.     WriteFill   (mfile, "", 14);
  664.     WriteString (mfile, ":CARDINAL;");
  665.     WriteLn (mfile);
  666.  
  667.     IF FontAdapt IN MainConfig.configFlags0 THEN
  668.       WriteString (mfile, "\t");
  669.       WriteString (mfile, "wleft, wtop, ww, wh");
  670.       WriteFill   (mfile, "", 19);
  671.       WriteString (mfile, ":INTEGER;");
  672.       WriteLn (mfile)
  673.  
  674.     ELSE
  675.       WriteString (mfile, "\t");
  676.       WriteString (mfile, "menuTagPtr");
  677.       WriteFill   (mfile, "", 10);
  678.       WriteString (mfile, ":TagItemPtr;");
  679.       WriteLn (mfile);
  680.  
  681.       WriteString (mfile, "\t");
  682.       WriteString (mfile, "menuTags");
  683.       WriteFill   (mfile, "", 8);
  684.       WriteString (mfile, ":ARRAY [0..1] OF TagItem;");
  685.       WriteLn (mfile)
  686.       END;
  687.  
  688.     WriteString (mfile, "\t");
  689.     WriteString (mfile, "windowTagPtr");
  690.     WriteFill   (mfile, "", 12);
  691.     WriteString (mfile, ":TagItemPtr;");
  692.     WriteLn (mfile);
  693.  
  694.     WriteString (mfile, "\t");
  695.     WriteString (mfile, "windowTags");
  696.     WriteFill   (mfile, "", 10);
  697.     WriteString (mfile, ":ARRAY [1..20] OF TagItem;");
  698.     WriteLn (mfile);
  699.     WriteLn (mfile);
  700.  
  701.  
  702.     WriteString (mfile, "BEGIN");
  703.     WriteLn (mfile);
  704.  
  705.     WriteString (mfile, "Assert (");
  706.     WriteString (mfile, pw^.name);
  707.     WriteString (mfile, "Window = NIL, ADR ('");
  708.     WriteString (mfile, pw^.name);
  709.     WriteString (mfile, "Window is already open!'));");
  710.     WriteLn (mfile);
  711.     WriteLn (mfile);
  712.  
  713.  
  714.     IF FontAdapt IN MainConfig.configFlags0 THEN
  715.       IF NOT (args.mouse) THEN
  716.         WriteString (mfile, "wleft := ");
  717.         WriteString (mfile, pw^.name);
  718.         WriteString (mfile, "Left;");
  719.         WriteLn (mfile);
  720.  
  721.         WriteString (mfile, "wtop  := ");
  722.         WriteString (mfile, pw^.name);
  723.         WriteString (mfile, "Top;");
  724.         WriteLn (mfile);
  725.         WriteLn (mfile)
  726.         END;
  727.  
  728.  
  729.       WriteString (mfile, "ComputeFont (");
  730.       WriteString (mfile, pw^.name);
  731.       WriteString (mfile, "Width, ");
  732.       WriteString (mfile, pw^.name);
  733.       WriteString (mfile, "Height);");
  734.       WriteLn (mfile);
  735.  
  736.       WriteString (mfile, "ww := ComputeX (");
  737.       WriteString (mfile, pw^.name);
  738.       WriteString (mfile, "Width);");
  739.       WriteLn (mfile);
  740.  
  741.       WriteString (mfile, "wh := ComputeY (");
  742.       WriteString (mfile, pw^.name);
  743.       WriteString (mfile, "Height);");
  744.       WriteLn (mfile);
  745.       WriteLn (mfile);
  746.  
  747.  
  748.       IF args.mouse THEN
  749.         WriteString (mfile, "wleft := Screen^.mouseX - (ww DIV 2);");
  750.         WriteLn (mfile);
  751.  
  752.         WriteString (mfile, "wtop  := Screen^.mouseY - (wh DIV 2);");
  753.         WriteLn (mfile)
  754.  
  755.       ELSE
  756.         WriteString (mfile, "IF Screen^.width < wleft + ww + OffX + Screen^.wBorRight THEN");
  757.         WriteLn (mfile);
  758.         WriteString (mfile, "  wleft := Screen^.width - ww");
  759.         WriteLn (mfile);
  760.         WriteString (mfile, "  END;");
  761.         WriteLn (mfile);
  762.  
  763.         WriteString (mfile, "IF Screen^.height < wtop + wh + OffY + Screen^.wBorBottom THEN");
  764.         WriteLn (mfile);
  765.         WriteString (mfile, "  wtop := Screen^.height - wh");
  766.         WriteLn (mfile);
  767.         WriteString (mfile, "  END;");
  768.         WriteLn (mfile)
  769.         END;
  770.       WriteLn (mfile);
  771.  
  772.  
  773.       IF gcSysFont IN CConfig THEN
  774.         WriteString (mfile, pw^.name);
  775.         WriteString (mfile, "Font := OpenDiskFont (Font);");
  776.         WriteLn (mfile);
  777.  
  778.         WriteString (mfile, "IF ");
  779.         WriteString (mfile, pw^.name);
  780.         WriteString (mfile, "Font = NIL THEN");
  781.         WriteLn (mfile);
  782.  
  783.         WriteString (mfile, "  RETURN 5");
  784.         WriteLn (mfile);
  785.         WriteString (mfile, "  END;");
  786.         WriteLn (mfile);
  787.         WriteLn (mfile)
  788.         END
  789.  
  790.     ELSE
  791.       IF backDrop IN pw^.windowFlags THEN
  792.         WriteString (mfile, "offx := 0;")
  793.       ELSE
  794.         WriteString (mfile, "offx := Screen^.wBorLeft;")
  795.         END;
  796.       WriteLn (mfile);
  797.  
  798.       WriteString (mfile, "offy := CARDINAL (Screen^.wBorTop) + Screen^.rastPort.txHeight + 1;");
  799.       WriteLn (mfile);
  800.       WriteLn (mfile)
  801.       END;
  802.  
  803.  
  804.     IF pw^.windowText # NIL THEN
  805.       WriteString (mfile, "Init");
  806.       WriteString (mfile, pw^.name);
  807.       WriteString (mfile, "ITexts;");
  808.       WriteLn (mfile);
  809.       WriteLn (mfile)
  810.       END;
  811.  
  812.  
  813.     IF pw^.gadgets.head^.succ # NIL THEN
  814.       WriteString (mfile, "IF createGadgets THEN");
  815.       WriteLn (mfile);
  816.  
  817.       WriteString (mfile, "  ret := Create");
  818.       WriteString (mfile, pw^.name);
  819.       WriteString (mfile, "Gadgets ();");
  820.       WriteLn (mfile);
  821.  
  822.       WriteString (mfile, "  IF ret # 0 THEN");
  823.       WriteLn (mfile);
  824.  
  825.       WriteString (mfile, "    RETURN ret");
  826.       WriteLn (mfile);
  827.  
  828.       WriteString (mfile, "    END");
  829.       WriteLn (mfile);
  830.  
  831.       WriteString (mfile, "  END;");
  832.       WriteLn (mfile);
  833.       WriteLn (mfile)
  834.       END;
  835.  
  836.  
  837.     IF pw^.menus.head^.succ # NIL THEN
  838.       WriteString (mfile, pw^.name);
  839.       WriteString (mfile, "MenuStrip := CreateMenusA (ADR (");
  840.       WriteString (mfile, pw^.name);
  841.       WriteString (mfile, "Menu), NIL);");
  842.       WriteLn (mfile);
  843.  
  844.       WriteString (mfile, "IF ");
  845.       WriteString (mfile, pw^.name);
  846.       WriteString (mfile, "MenuStrip = NIL THEN");
  847.       WriteLn (mfile);
  848.  
  849.       WriteString (mfile, "  RETURN 3");
  850.       WriteLn (mfile);
  851.  
  852.       WriteString (mfile, "  END;");
  853.       WriteLn (mfile);
  854.  
  855.  
  856.       IF FontAdapt IN MainConfig.configFlags0 THEN
  857.         WriteString (mfile, "IF NOT (LayoutMenusA (");
  858.         WriteString (mfile, pw^.name);
  859.         WriteString (mfile, "MenuStrip, VisualInfo, NIL)) THEN");
  860.         WriteLn (mfile);
  861.  
  862.  
  863.       ELSE
  864.         GetAttrName (attrName);
  865.  
  866.         WriteString (mfile, "menuTagPtr := TAG (menuTags,");
  867.         WriteLn (mfile);
  868.  
  869.         WriteString (mfile, "\t\t");
  870.         WriteString (mfile, "gtmnTextAttr,");
  871.         WriteFill   (mfile, "", 13);
  872.         WriteString (mfile, "ADR (");
  873.         WriteString (mfile, attrName);
  874.         WriteString (mfile, "),");
  875.         WriteLn (mfile);
  876.  
  877.         WriteString (mfile, "\t\t");
  878.         WriteString (mfile, "tagEnd);");
  879.         WriteLn (mfile);
  880.  
  881.  
  882.         WriteString (mfile, "IF NOT (LayoutMenusA (");
  883.         WriteString (mfile, pw^.name);
  884.         WriteString (mfile, "MenuStrip, VisualInfo, menuTagPtr)) THEN");
  885.         WriteLn (mfile)
  886.         END;
  887.  
  888.  
  889.       WriteString (mfile, "  RETURN 4");
  890.       WriteLn (mfile);
  891.  
  892.       WriteString (mfile, "  END;");
  893.       WriteLn (mfile);
  894.       WriteLn (mfile)
  895.       END;
  896.  
  897.  
  898.  
  899.     IF ((Zoom IN pw^.tagFlags) OR
  900.         (DefaultZoom IN pw^.tagFlags)) AND
  901.         NOT (windowSizing IN pw^.windowFlags) THEN
  902.       IF Zoom IN pw^.tagFlags THEN
  903.         WriteString (mfile, pw^.name);
  904.         WriteString (mfile, "Zoom[1] := ");
  905.         WriteString (mfile, pw^.name);
  906.         WriteString (mfile, "Left;");
  907.         WriteLn (mfile);
  908.  
  909.         WriteString (mfile, pw^.name);
  910.         WriteString (mfile, "Zoom[2] := ");
  911.         WriteString (mfile, pw^.name);
  912.         WriteString (mfile, "Top;");
  913.         WriteLn (mfile)
  914.  
  915.       ELSE
  916.         WriteString (mfile, pw^.name);
  917.         WriteString (mfile, "Zoom[1] := 0;");
  918.         WriteLn (mfile);
  919.  
  920.         WriteString (mfile, pw^.name);
  921.         WriteString (mfile, "Zoom[2] := 0;");
  922.         WriteLn (mfile)
  923.         END;
  924.  
  925.  
  926.       WriteString (mfile, pw^.name);
  927.       WriteString (mfile, "Zoom[3] := TextLength (ADR (Screen^.rastPort),");
  928.       WriteLn (mfile);
  929.  
  930.       WriteString (mfile, "                       ADR ('");
  931.       WriteString (mfile, pw^.windowTitle);
  932.       WriteString (mfile, "'), ");
  933.       WriteInt    (mfile, Length (pw^.windowTitle), 1);
  934.       WriteString (mfile, ") + 80;");
  935.       WriteLn (mfile);
  936.  
  937.       WriteString (mfile, pw^.name);
  938.       WriteString (mfile, "Zoom[4] := Screen^.wBorTop + INTEGER (Screen^.rastPort.txHeight) + 1;");
  939.       WriteLn (mfile)
  940.       END
  941.     END WriteCreateWinHead;
  942.  
  943.  
  944.  
  945.     PROCEDURE WriteCreateWinTail    (    pw            :ProjectWindowPtr);
  946.  
  947.     BEGIN
  948.     WriteString (mfile, "Render");
  949.     WriteString (mfile, pw^.name);
  950.     WriteString (mfile, "Window (TRUE);");
  951.     WriteLn (mfile);
  952.  
  953.  
  954.     IF pw^.menus.head^.succ # NIL THEN
  955.       WriteLn (mfile);
  956.       WriteString (mfile, "IF NOT (SetMenuStrip (");
  957.       WriteString (mfile, pw^.name);
  958.       WriteString (mfile, "Window, ");
  959.       WriteString (mfile, pw^.name);
  960.       WriteString (mfile, "MenuStrip)) THEN");
  961.       WriteLn (mfile);
  962.  
  963.       WriteString (mfile, "  RETURN 5");
  964.       WriteLn (mfile);
  965.  
  966.       WriteString (mfile, "  END;");
  967.       WriteLn (mfile);
  968.       WriteLn (mfile)
  969.       END;
  970.  
  971.  
  972.     WriteLn (mfile);
  973.     WriteString (mfile, "RETURN 0");
  974.     WriteLn (mfile);
  975.  
  976.     WriteString (mfile, "END Create");
  977.     WriteString (mfile, pw^.name);
  978.     WriteString (mfile, "Window;");
  979.     WriteLn (mfile);
  980.     WriteLn (mfile)
  981.     END WriteCreateWinTail;
  982.  
  983.  
  984.   (* WriteWindowCreate *)
  985.   BEGIN
  986.   WriteCreateWinHead (pw);
  987.   WriteOpenWindow (pw);
  988.   WriteCreateWinTail (pw)
  989.   END WriteWindowCreate;
  990.  
  991.  
  992.   PROCEDURE WriteWindowRender        (    pw            :ProjectWindowPtr);
  993.  
  994.   CONST    outerBox            =bbf15;
  995.  
  996.   VAR    box                :BevelBoxPtr;
  997.       bleft, btop            :CARDINAL;
  998.  
  999.  
  1000.  
  1001.     PROCEDURE calculateOuterBoxes    (    firstbox        :BevelBoxPtr);
  1002.  
  1003.     VAR    ibox, jbox            :BevelBoxPtr;
  1004.  
  1005.  
  1006.       PROCEDURE isOuterBox        (VAR outBox, inBox    :BevelBox) :BOOLEAN;
  1007.  
  1008.       BEGIN
  1009.       RETURN (outBox.left <= inBox.left) &
  1010.              (outBox.top  <= inBox.top) &
  1011.              (inBox.left + CARDINAL (inBox.width) <= outBox.left + CARDINAL (outBox.width)) &
  1012.              (inBox.top + CARDINAL (inBox.height) <= outBox.top + CARDINAL (outBox.height))
  1013.       END isOuterBox;
  1014.  
  1015.  
  1016.     (* calculateOuterBoxes *)
  1017.     BEGIN
  1018.     ibox := firstbox;
  1019.     WHILE ibox^.succ # NIL DO
  1020.       INCL (ibox^.flags, outerBox);
  1021.       ibox := ibox^.succ
  1022.       END;
  1023.  
  1024.     ibox := firstbox^.succ;
  1025.     WHILE ibox^.succ # NIL DO
  1026.       jbox := firstbox;
  1027.  
  1028.       WHILE (jbox # ibox) AND (outerBox IN ibox^.flags) DO
  1029.         IF outerBox IN jbox^.flags THEN
  1030.           IF    isOuterBox (ibox^, jbox^) THEN
  1031.             EXCL (jbox^.flags, outerBox)
  1032.           ELSIF isOuterBox (jbox^, ibox^) THEN
  1033.             EXCL (ibox^.flags, outerBox)
  1034.             END
  1035.           END;
  1036.  
  1037.         jbox := jbox^.succ
  1038.         END;
  1039.       ibox := ibox^.succ
  1040.       END
  1041.     END calculateOuterBoxes;
  1042.  
  1043.  
  1044.   (* WriteWindowRender *)
  1045.   BEGIN
  1046.   bleft := pw^.leftBorder;
  1047.   btop  := pw^.topBorder;
  1048.  
  1049.  
  1050.   WriteLn (mfile);
  1051.   WriteString (mfile, "PROCEDURE Render");
  1052.   WriteString (mfile, pw^.name);
  1053.   WriteString (mfile, "Window");
  1054.   WriteFill   (mfile, pw^.name, 14);
  1055.   WriteString (mfile, "(    firstRender");
  1056.   WriteFill   (mfile, "", 16);
  1057.   WriteString (mfile, ":BOOLEAN);");
  1058.   WriteLn (mfile);
  1059.   WriteLn (mfile);
  1060.  
  1061.  
  1062.  
  1063.   IF (pw^.boxes.head^.succ # NIL) OR
  1064.      ((pw^.windowText # NIL) AND NOT (FontAdapt IN MainConfig.configFlags0)) THEN
  1065.     WriteString (mfile, "VAR");
  1066.  
  1067.     IF NOT (FontAdapt IN MainConfig.configFlags0) THEN
  1068.       WriteString (mfile, "\t");
  1069.       WriteString (mfile, "offx, offy");
  1070.       WriteFill   (mfile, "", 9);
  1071.       WriteString (mfile, ":CARDINAL;");
  1072.       WriteLn (mfile)
  1073.       END;
  1074.  
  1075.  
  1076.     IF pw^.boxes.head^.succ # NIL THEN
  1077.       WriteString (mfile, "\t");
  1078.       WriteString (mfile, "bevelTags");
  1079.       WriteFill   (mfile, "", 9);
  1080.       WriteString (mfile, ":ARRAY [0..2] OF TagItem;");
  1081.       WriteLn (mfile);
  1082.  
  1083.       WriteString (mfile, "\t");
  1084.       WriteString (mfile, "bevelTagPtr");
  1085.       WriteFill   (mfile, "", 11);
  1086.       WriteString (mfile, ":TagItemPtr;");
  1087.       WriteLn (mfile);
  1088.       WriteLn (mfile);
  1089.  
  1090.       IF args.raster AND (pw^.gadgets.head^.succ # NIL) THEN
  1091.         WriteString (mfile, "\t");
  1092.         WriteString (mfile, "dummy");
  1093.         WriteFill   (mfile, "", 5);
  1094.         WriteString (mfile, ":INTEGER;");
  1095.         WriteLn (mfile)
  1096.         END
  1097.       END;
  1098.  
  1099.     WriteLn (mfile)
  1100.     END;
  1101.  
  1102.  
  1103.  
  1104.   WriteString (mfile, "BEGIN");
  1105.   WriteLn (mfile);
  1106.  
  1107.  
  1108.   IF NOT (FontAdapt IN MainConfig.configFlags0) AND
  1109.      ((pw^.windowText # NIL) OR (pw^.boxes.head^.succ # NIL)) THEN
  1110.     IF backDrop IN pw^.windowFlags THEN
  1111.       WriteString (mfile, "offx := 0;");
  1112.       WriteLn (mfile);
  1113.  
  1114.       WriteString (mfile, "offy := CARDINAL (Screen^.wBorTop) + Screen^.rastPort.txHeight + 1;");
  1115.       WriteLn (mfile)
  1116.  
  1117.     ELSE
  1118.       WriteString (mfile, "offx := ");
  1119.       WriteString (mfile, pw^.name);
  1120.       WriteString (mfile, "Window^.borderLeft;");
  1121.       WriteLn (mfile);
  1122.  
  1123.       WriteString (mfile, "offy := ");
  1124.       WriteString (mfile, pw^.name);
  1125.       WriteString (mfile, "Window^.borderTop;");
  1126.       WriteLn (mfile)
  1127.       END;
  1128.     WriteLn (mfile)
  1129.     END;
  1130.  
  1131.  
  1132.  
  1133.   WriteString (mfile, "IF NOT (firstRender) THEN");
  1134.   WriteLn (mfile);
  1135.  
  1136.   IF (args.raster) AND
  1137.      (pw^.boxes.head^.succ # NIL) AND
  1138.      (pw^.gadgets.head^.succ # NIL) THEN
  1139.     WriteString (mfile, "  dummy := RemoveGList (");
  1140.     WriteString (mfile, pw^.name);
  1141.     WriteString (mfile, "Window, ");
  1142.     WriteString (mfile, pw^.name);
  1143.     WriteString (mfile, "GadgetList, -1);");
  1144.     WriteLn (mfile)
  1145.     END;
  1146.  
  1147.   WriteString (mfile, "  GTBeginRefresh (");
  1148.   WriteString (mfile, pw^.name);
  1149.   WriteString (mfile, "Window);");
  1150.   WriteLn (mfile);
  1151.  
  1152.   IF (pw^.boxes.head^.succ # NIL) OR
  1153.      (pw^.windowText # NIL) THEN
  1154.     WriteString (mfile, "  END;");
  1155.     WriteLn (mfile)
  1156.     END;
  1157.  
  1158.  
  1159.  
  1160.   IF pw^.boxes.head^.succ # NIL THEN
  1161.     WriteLn (mfile);
  1162.     IF args.raster THEN
  1163.       calculateOuterBoxes (pw^.boxes.head);
  1164.  
  1165.       WriteString (mfile, "DrawRast (");
  1166.       WriteString (mfile, pw^.name);
  1167.       WriteString (mfile, "Window);");
  1168.       WriteLn (mfile);
  1169.       WriteLn (mfile);
  1170.  
  1171.  
  1172.       box := pw^.boxes.head;
  1173.       WHILE box^.succ # NIL DO
  1174.         IF outerBox IN box^.flags THEN
  1175.           WriteString (mfile, "FilledBBox (VisualInfo,");
  1176.           WriteLn (mfile);
  1177.  
  1178.           WriteString (mfile, "            ");
  1179.           WriteString (mfile, pw^.name);
  1180.           WriteString (mfile, "Window^.rPort,");
  1181.           WriteLn (mfile);
  1182.  
  1183.           IF FontAdapt IN MainConfig.configFlags0 THEN
  1184.             WriteString (mfile, "            OffX + ComputeX (");
  1185.             WriteCard   (mfile, box^.left - bleft, 1);
  1186.             WriteString (mfile, "), ");
  1187.             WriteLn (mfile);
  1188.  
  1189.             WriteString (mfile, "            OffY + ComputeY (");
  1190.             WriteCard   (mfile, box^.top - btop, 1);
  1191.             WriteString (mfile, "), ");
  1192.             WriteLn (mfile);
  1193.  
  1194.             WriteString (mfile, "            ComputeX (");
  1195.             WriteCard   (mfile, box^.width, 1);
  1196.             WriteString (mfile, "), ");
  1197.             WriteLn (mfile);
  1198.  
  1199.             WriteString (mfile, "            ComputeY (");
  1200.             WriteCard   (mfile, box^.height, 1);
  1201.             WriteString (mfile, "), ");
  1202.             WriteLn (mfile);
  1203.  
  1204.           ELSE
  1205.             WriteString (mfile, "            offx + ");
  1206.             WriteCard   (mfile, box^.left - bleft, 1);
  1207.             WriteString (mfile, ",");
  1208.             WriteLn (mfile);
  1209.  
  1210.             WriteString (mfile, "            offy + ");
  1211.             WriteCard   (mfile, box^.top - btop, 1);
  1212.             WriteString (mfile, ",");
  1213.             WriteLn (mfile);
  1214.  
  1215.             WriteString (mfile, "            ");
  1216.             WriteCard   (mfile, box^.width, 1);
  1217.             WriteString (mfile, ",");
  1218.             WriteLn (mfile);
  1219.  
  1220.             WriteString (mfile, "            ");
  1221.             WriteCard   (mfile, box^.height, 1);
  1222.             WriteString (mfile, ",");
  1223.             WriteLn (mfile)
  1224.             END;
  1225.  
  1226.           IF recessed IN box^.flags THEN
  1227.             WriteString (mfile, "            TRUE);")
  1228.           ELSE
  1229.             WriteString (mfile, "            FALSE);")
  1230.             END;
  1231.           WriteLn (mfile)
  1232.           END;  (* IF outerBox *)
  1233.  
  1234.         box := box^.succ
  1235.         END
  1236.       END;  (* IF args.raster *)
  1237.  
  1238.  
  1239.     box := pw^.boxes.head;
  1240.     WHILE box^.succ # NIL DO
  1241.       IF NOT (args.raster) OR NOT (outerBox IN box^.flags) THEN
  1242.  
  1243.         WriteString (mfile, "bevelTagPtr := TAG (bevelTags,");
  1244.         WriteLn (mfile);
  1245.  
  1246.         WriteString (mfile, "\t\t");
  1247.         WriteString (mfile, "gtVisualInfo,");
  1248.         WriteFill   (mfile, "", 11);
  1249.         WriteString (mfile, "VisualInfo,");
  1250.         WriteLn (mfile);
  1251.  
  1252.         IF recessed IN box^.flags THEN
  1253.           WriteString (mfile, "\t\t");
  1254.           WriteString (mfile, "gtbbRecessed,");
  1255.           WriteFill   (mfile, "", 13);
  1256.           WriteString (mfile, "TRUE,");
  1257.           WriteLn (mfile)
  1258.           END;
  1259.  
  1260.         WriteString (mfile, "\t\t");
  1261.         WriteString (mfile, "tagEnd);");
  1262.         WriteLn (mfile);
  1263.  
  1264.  
  1265.         WriteString (mfile, "DrawBevelBoxA (");
  1266.         WriteString (mfile, pw^.name);
  1267.         WriteString (mfile, "Window^.rPort,");
  1268.         WriteLn (mfile);
  1269.  
  1270.         IF FontAdapt IN MainConfig.configFlags0 THEN
  1271.           WriteString (mfile, "               OffX + ComputeX (");
  1272.           WriteCard   (mfile, box^.left - bleft, 1);
  1273.           WriteString (mfile, "),");
  1274.           WriteLn (mfile);
  1275.  
  1276.           WriteString (mfile, "               OffY + ComputeY (");
  1277.           WriteCard   (mfile, box^.top - btop, 1);
  1278.           WriteString (mfile, "),");
  1279.           WriteLn (mfile);
  1280.  
  1281.           WriteString (mfile, "               ComputeX (");
  1282.           WriteCard   (mfile, box^.width, 1);
  1283.           WriteString (mfile, "),");
  1284.           WriteLn (mfile);
  1285.  
  1286.           WriteString (mfile, "               ComputeY (");
  1287.           WriteCard   (mfile, box^.height, 1);
  1288.           WriteString (mfile, "),");
  1289.           WriteLn (mfile);
  1290.  
  1291.           WriteString (mfile, "               bevelTagPtr);");
  1292.           WriteLn (mfile)
  1293.  
  1294.         ELSE
  1295.           WriteString (mfile, "               offx + ");
  1296.           WriteCard   (mfile, box^.left - bleft, 1);
  1297.           WriteString (mfile, ",");
  1298.           WriteLn (mfile);
  1299.  
  1300.           WriteString (mfile, "               offy + ");
  1301.           WriteCard   (mfile, box^.top - btop, 1);
  1302.           WriteString (mfile, ",");
  1303.           WriteLn (mfile);
  1304.  
  1305.           WriteString (mfile, "               ");
  1306.           WriteCard   (mfile, box^.width, 1);
  1307.           WriteString (mfile, ",");
  1308.           WriteLn (mfile);
  1309.  
  1310.           WriteString (mfile, "               ");
  1311.           WriteCard   (mfile, box^.height, 1);
  1312.           WriteString (mfile, ", bevelTagPtr);");
  1313.           WriteLn (mfile)
  1314.           END
  1315.         END;
  1316.  
  1317.  
  1318.       IF dropBox IN box^.flags THEN
  1319.         WriteString (mfile, "bevelTagPtr := TAG (bevelTags,");
  1320.         WriteLn (mfile);
  1321.  
  1322.         WriteString (mfile, "\t\t");
  1323.         WriteString (mfile, "gtVisualInfo,");
  1324.         WriteFill   (mfile, "", 11);
  1325.         WriteString (mfile, "VisualInfo,");
  1326.         WriteLn (mfile);
  1327.  
  1328.         WriteString (mfile, "\t\t");
  1329.         WriteString (mfile, "gtbbRecessed,");
  1330.         WriteFill   (mfile, "", 13);
  1331.         WriteString (mfile, "TRUE,");
  1332.         WriteLn (mfile);
  1333.  
  1334.         WriteString (mfile, "\t\t");
  1335.         WriteString (mfile, "tagEnd);");
  1336.         WriteLn (mfile);
  1337.  
  1338.  
  1339.         WriteString (mfile, "DrawBevelBoxA (");
  1340.         WriteString (mfile, pw^.name);
  1341.         WriteString (mfile, "Window^.rPort,");
  1342.         WriteLn (mfile);
  1343.  
  1344.         IF FontAdapt IN MainConfig.configFlags0 THEN
  1345.           WriteString (mfile, "               OffX + ComputeX (");
  1346.           WriteCard   (mfile, box^.left - bleft + 4, 1);
  1347.           WriteString (mfile, "),");
  1348.           WriteLn (mfile);
  1349.  
  1350.           WriteString (mfile, "               OffY + ComputeY (");
  1351.           WriteCard   (mfile, box^.top - btop + 2, 1);
  1352.           WriteString (mfile, "),");
  1353.           WriteLn (mfile);
  1354.  
  1355.           WriteString (mfile, "               ComputeX (");
  1356.           WriteCard   (mfile, box^.width - 8, 1);
  1357.           WriteString (mfile, "),");
  1358.           WriteLn (mfile);
  1359.  
  1360.           WriteString (mfile, "               ComputeY (");
  1361.           WriteCard   (mfile, box^.height - 4, 1);
  1362.           WriteString (mfile, "),");
  1363.           WriteLn (mfile)
  1364.  
  1365.         ELSE
  1366.           WriteString (mfile, "               offx + ");
  1367.           WriteCard   (mfile, box^.left - bleft + 4, 1);
  1368.           WriteString (mfile, ",");
  1369.  
  1370.           WriteString (mfile, "               offy + ");
  1371.           WriteCard   (mfile, box^.top - btop + 2, 1);
  1372.           WriteString (mfile, ",");
  1373.           WriteLn (mfile);
  1374.  
  1375.           WriteString (mfile, "               ");
  1376.           WriteCard (mfile, box^.width - 8, 1);
  1377.           WriteString (mfile, ",");
  1378.           WriteLn (mfile);
  1379.  
  1380.           WriteString (mfile, "               ");
  1381.           WriteCard   (mfile, box^.height - 4, 1);
  1382.           WriteString (mfile, ",")
  1383.           END;
  1384.  
  1385.         WriteString (mfile, "               bevelTagPtr);");
  1386.         WriteLn (mfile);
  1387.         WriteLn (mfile)
  1388.         END;
  1389.  
  1390.       box := box^.succ
  1391.       END;
  1392.     WriteLn (mfile);
  1393.     END;
  1394.  
  1395.  
  1396.  
  1397.   IF pw^.windowText # NIL THEN
  1398.     IF FontAdapt IN MainConfig.configFlags0 THEN
  1399.       WriteLn (mfile);
  1400.       WriteString (mfile, "PrintIText (");
  1401.       WriteString (mfile, pw^.name);
  1402.       WriteString (mfile, "Window^.rPort, ADR (");
  1403.       WriteString (mfile, pw^.name);
  1404.       WriteString (mfile, "IText), 0, 0);");
  1405.       WriteLn (mfile)
  1406.  
  1407.     ELSE
  1408.       WriteLn (mfile);
  1409.       WriteString (mfile, "PrintIText (");
  1410.       WriteString (mfile, pw^.name);
  1411.       WriteString (mfile, "Window^.rPort, ADR (");
  1412.       WriteString (mfile, pw^.name);
  1413.       WriteString (mfile, "IText), offx, offy);");
  1414.       WriteLn (mfile)
  1415.       END;
  1416.     WriteLn (mfile)
  1417.     END;
  1418.  
  1419.  
  1420.  
  1421.   IF (pw^.boxes.head^.succ # NIL) OR
  1422.      (pw^.windowText # NIL) THEN
  1423.     WriteString (mfile, "IF NOT (firstRender) THEN");
  1424.     WriteLn (mfile)
  1425.     END;
  1426.  
  1427.   WriteString (mfile, "  GTEndRefresh (");
  1428.   WriteString (mfile, pw^.name);
  1429.   WriteString (mfile, "Window, TRUE)");
  1430.   WriteLn (mfile);
  1431.  
  1432.  
  1433.   IF (args.raster) AND
  1434.      (pw^.boxes.head^.succ # NIL) AND
  1435.      (pw^.gadgets.head^.succ # NIL) THEN
  1436.     WriteString (mfile, "  END;");
  1437.     WriteLn (mfile);
  1438.  
  1439.     WriteLn (mfile);
  1440.     WriteString (mfile, "dummy := AddGList (");
  1441.     WriteString (mfile, pw^.name);
  1442.     WriteString (mfile, "Window, ");
  1443.     WriteString (mfile, pw^.name);
  1444.     WriteString (mfile, "GadgetList, -1, -1, NIL);");
  1445.     WriteLn (mfile);
  1446.  
  1447.     WriteString (mfile, "RefreshGList (");
  1448.     WriteString (mfile, pw^.name);
  1449.     WriteString (mfile, "GadgetList, ");
  1450.     WriteString (mfile, pw^.name);
  1451.     WriteString (mfile, "Window, NIL, -1);");
  1452.     WriteLn (mfile);
  1453.  
  1454.     WriteString (mfile, "GTRefreshWindow (");
  1455.     WriteString (mfile, pw^.name);
  1456.     WriteString (mfile, "Window, NIL);");
  1457.     WriteLn (mfile)
  1458.  
  1459.   ELSE
  1460.     WriteString (mfile, "ELSE");
  1461.     WriteLn (mfile);
  1462.  
  1463.     WriteString (mfile, "  GTRefreshWindow (");
  1464.     WriteString (mfile, pw^.name);
  1465.     WriteString (mfile, "Window, NIL);");
  1466.     WriteLn (mfile);
  1467.  
  1468.     WriteString (mfile, "  END");
  1469.     WriteLn (mfile)
  1470.     END;
  1471.  
  1472.  
  1473.   WriteString (mfile, "END Render");
  1474.   WriteString (mfile, pw^.name);
  1475.   WriteString (mfile, "Window;");
  1476.   WriteLn (mfile);
  1477.   WriteLn (mfile)
  1478.   END WriteWindowRender;
  1479.  
  1480.  
  1481.  
  1482.   PROCEDURE WriteWindowRefresh        (    pw            :ProjectWindowPtr);
  1483.  
  1484.   BEGIN
  1485.   WriteLn (dfile);
  1486.   WriteString (dfile, "PROCEDURE Refresh");
  1487.   WriteString (dfile, pw^.name);
  1488.   WriteString (dfile, "Window;");
  1489.   WriteLn (dfile);
  1490.   WriteLn (dfile);
  1491.  
  1492.  
  1493.   WriteLn (mfile);
  1494.   WriteString (mfile, "PROCEDURE Refresh");
  1495.   WriteString (mfile, pw^.name);
  1496.   WriteString (mfile, "Window;");
  1497.   WriteLn (mfile);
  1498.   WriteLn (mfile);
  1499.  
  1500.  
  1501.  
  1502.   WriteString (mfile, "BEGIN");
  1503.   WriteLn (mfile);
  1504.  
  1505.   WriteString (mfile, "Render");
  1506.   WriteString (mfile, pw^.name);
  1507.   WriteString (mfile, "Window (FALSE);");
  1508.   WriteLn (mfile);
  1509.  
  1510.   WriteString (mfile, "END Refresh");
  1511.   WriteString (mfile, pw^.name);
  1512.   WriteString (mfile, "Window;");
  1513.   WriteLn (mfile);
  1514.   WriteLn (mfile)
  1515.   END WriteWindowRefresh;
  1516.  
  1517.  
  1518.  
  1519.   PROCEDURE WriteWindowFree        (    pw            :ProjectWindowPtr);
  1520.  
  1521.   BEGIN
  1522.   WriteLn (dfile);
  1523.   WriteString (dfile, "PROCEDURE Free");
  1524.   WriteString (dfile, pw^.name);
  1525.   WriteString (dfile, "Window;");
  1526.   WriteLn (dfile);
  1527.   WriteLn (dfile);
  1528.  
  1529.  
  1530.   WriteLn (mfile);
  1531.   WriteString (mfile, "PROCEDURE Free");
  1532.   WriteString (mfile, pw^.name);
  1533.   WriteString (mfile, "Window;");
  1534.   WriteLn (mfile);
  1535.   WriteLn (mfile);
  1536.  
  1537.  
  1538.   WriteString (mfile, "BEGIN");
  1539.   WriteLn (mfile);
  1540.  
  1541.   IF pw^.menus.head^.succ # NIL THEN
  1542.     WriteString (mfile, "IF ");
  1543.     WriteString (mfile, pw^.name);
  1544.     WriteString (mfile, "MenuStrip # NIL THEN");
  1545.     WriteLn (mfile);
  1546.  
  1547.     WriteString (mfile, "  IF ");
  1548.     WriteString (mfile, pw^.name);
  1549.     WriteString (mfile, "Window # NIL THEN");
  1550.     WriteLn (mfile);
  1551.  
  1552.     WriteString (mfile, "    ClearMenuStrip (");
  1553.     WriteString (mfile, pw^.name);
  1554.     WriteString (mfile, "Window)");
  1555.     WriteLn (mfile);
  1556.  
  1557.     WriteString (mfile, "    END;");
  1558.     WriteLn (mfile);
  1559.  
  1560.     WriteString (mfile, "  FreeMenus (");
  1561.     WriteString (mfile, pw^.name);
  1562.     WriteString (mfile, "MenuStrip);");
  1563.     WriteLn (mfile);
  1564.  
  1565.     WriteString (mfile, "  ");
  1566.     WriteString (mfile, pw^.name);
  1567.     WriteString (mfile, "MenuStrip := NIL;");
  1568.     WriteLn (mfile);
  1569.  
  1570.     WriteString (mfile, "  END;");
  1571.     WriteLn (mfile);
  1572.     WriteLn (mfile)
  1573.     END;
  1574.  
  1575.  
  1576.   WriteString (mfile, "IF ");
  1577.   WriteString (mfile, pw^.name);
  1578.   WriteString (mfile, "Window # NIL THEN");
  1579.   WriteLn (mfile);
  1580.  
  1581.   WriteString (mfile, "  CloseWindow (");
  1582.   WriteString (mfile, pw^.name);
  1583.   WriteString (mfile, "Window);");
  1584.   WriteLn (mfile);
  1585.  
  1586.   WriteString (mfile, "  ");
  1587.   WriteString (mfile, pw^.name);
  1588.   WriteString (mfile, "Window := NIL;");
  1589.   WriteLn (mfile);
  1590.  
  1591.   WriteString (mfile, "  END;");
  1592.   WriteLn (mfile);
  1593.  
  1594.  
  1595.   IF pw^.gadgets.head^.succ # NIL THEN
  1596.     WriteLn (mfile);
  1597.     WriteString (mfile, "IF ");
  1598.     WriteString (mfile, pw^.name);
  1599.     WriteString (mfile, "GadgetList # NIL THEN");
  1600.     WriteLn (mfile);
  1601.  
  1602.     WriteString (mfile, "  FreeGadgets (");
  1603.     WriteString (mfile, pw^.name);
  1604.     WriteString (mfile, "GadgetList);");
  1605.     WriteLn (mfile);
  1606.  
  1607.     WriteString (mfile, "  ");
  1608.     WriteString (mfile, pw^.name);
  1609.     WriteString (mfile, "GadgetList := NIL;");
  1610.     WriteLn (mfile);
  1611.  
  1612.     WriteString (mfile, "  END;");
  1613.     WriteLn (mfile)
  1614.     END;
  1615.  
  1616.  
  1617.   IF (FontAdapt IN MainConfig.configFlags0) AND
  1618.      (gcSysFont IN CConfig) THEN
  1619.     WriteString (mfile, "IF ");
  1620.     WriteString (mfile, pw^.name);
  1621.     WriteString (mfile, "Font # NIL THEN");
  1622.     WriteLn (mfile);
  1623.  
  1624.     WriteString (mfile, "  CloseFont (");
  1625.     WriteString (mfile, pw^.name);
  1626.     WriteString (mfile, "Font);");
  1627.     WriteLn (mfile);
  1628.  
  1629.     WriteString (mfile, "  ");
  1630.     WriteString (mfile, pw^.name);
  1631.     WriteString (mfile, "Font := NIL;");
  1632.  
  1633.     WriteString (mfile, "  END;");
  1634.     WriteLn (mfile)
  1635.     END;
  1636.  
  1637.  
  1638.   WriteString (mfile, "END Free");
  1639.   WriteString (mfile, pw^.name);
  1640.   WriteString (mfile, "Window;");
  1641.   WriteLn (mfile);
  1642.   WriteLn (mfile)
  1643.   END WriteWindowFree;
  1644.  
  1645.  
  1646. (* WriteWindowProcs *)
  1647. BEGIN
  1648. WriteWindowRender  (pw);
  1649. WriteWindowRefresh (pw);
  1650. WriteWindowCreate  (pw);
  1651. WriteWindowFree    (pw)
  1652. END WriteWindowProcs;
  1653.  
  1654.  
  1655.  
  1656. PROCEDURE WriteWindowExit        (    pw            :ProjectWindowPtr);
  1657.  
  1658. BEGIN
  1659. WriteString (mfile, "Free");
  1660. WriteString (mfile, pw^.name);
  1661. WriteString (mfile, "Window;");
  1662. WriteLn (mfile)
  1663. END WriteWindowExit;
  1664.  
  1665.  
  1666.  
  1667. (* GenerateWindows *)
  1668. BEGIN
  1669. InitIDCMPText
  1670. END GenerateWindows.
  1671.